/***************************
 * 共通JS
 ***************************/

/**
 * ネームスペース的なオブジェクト
 */
FEZX = {};

/**********************************************************
 * Const
 **********************************************************/

FEZX.Const = {
		
	Comment : {
		WIDTH_LENGTH : 51,
		CHARNAME_MIN_LENGTH : 3,
		CHARNAME_MAX_LENGTH : 16,
		STR_MAX_LENGTH : 128,
		BALLON_LINE_LENGTH : 40,
		
		dummy:null
	},
	
	dummy:null
};

/**********************************************************
 * Utility
 **********************************************************/

FEZX.Util = {};

/**
 * 共通でアラート表示
 *
 * @param {String} message
 * @param {String} title optional
 * @returns void
 */
FEZX.Util.Alert = function(message, title){
	/**
	 * 共通アラート
	 */
	if($("#commonAlert").html() == ""){
		$("#commonAlert").dialog( {
			bgiframe : true,
			autoOpen : false,
			width : 400,
			modal : true,
			buttons : {
				'OK' : function() {
					$("#commonAlert").dialog('close');
					
					return false;
				}
			},
		
			open : function(){
				if(FEZX.Util.IsIE6()){
					$('select').each(function(){
						$(this).hide();
					});
				}
			},
			close : function(){
				if(FEZX.Util.IsIE6()){
					$('select').each(function(){
						$(this).show();
					});
				}
			}
		});
	}

	if(!title){
		title = "";
	}

	$("#commonAlert").html(message.replace("\n", "<br />"));
	$("#commonAlert").dialog('option', 'title', title);
	$("#commonAlert").dialog('open');
	$(".ui-dialog-buttonset button[type=button]").focus();
	
	return;
};


/**
 * 数値カンマ振り
 *
 * @param {Number} number 数値
 * @param {Number} dec 小数点以下桁数
 */
FEZX.Util.NumberFormat = function(number, decimals, c, p) {
	if(!Number(number))return number;

	if (typeof (decimals) == 'undefined') {
		decimals = 0;
	}
	if (typeof (c) == 'undefined') {
		c = ',';
	}
	if (typeof (p) == 'undefined') {
		p = '.';
	}

	var place = Math.pow(10, decimals);
	var num = Math.round(number * place) / place;
	var values = num.toString().split('.');
	if (values.length == 1) {
		values.push('');
	}

	while (values[0] != (values[0] = values[0].replace(/^(-?\d+)(\d{3})/, '$1' + c + '$2')))
		;
	while (decimals != values[1].length) {
		values[1] += '0';
	}

	if (values[1] == '' || parseInt(values[1]) == 0)
		return values[0];
	else
		return values.join(p);
};

/**
 * ナンバーフォーマットの解除
 *
 * @param {String} formated
 * @returns {String}
 */
FEZX.Util.UntiNumberFormat =  function(formated){
	return formated.replace(/,/g, '');
};

/**
 * 日付フォーマット
 *
 * @param {String} date
 * @returns {String}
 */
FEZX.Util.DateFormat = function(date){
	return date.replace(/^(\d{4})\D(\d{1,2})\D(\d{1,2}).*/, '$1/$2/$3');
};

/**
 * オブジェクトをdisable化します。
 * 
 * jqueryオブジェクト
 */
FEZX.Util.Disable = function(obj)
{
	obj.attr('disabled', 'disabled');
	obj.css('background-color', FEZX.Const.DISABLE_COLOR);
};

/**
 * オブジェクトをenable化します。
 * 
 * jqueryオブジェクト
 */
FEZX.Util.Enable = function(obj)
{
	obj.removeAttr('disabled');
	obj.css('background-color', '');
};

/**
 * IE6か判定します
 * 
 * @return bool
 */
FEZX.Util.IsIE6 = function()
{
	var UA = window.navigator.userAgent.toLowerCase();
	
	return UA.indexOf("msie 6.0") != -1;
};

/**
 * クッキー名の値の文字列を取得します。
 * 
 * @param {String} name
 * @returns String
 */
FEZX.Util.GetCookie = function(name) {
	var allCookie = document.cookie;
	var arrayData = allCookie.split(";");
	var regex = new RegExp(" ", "g"); // 半角スペース除去
	
	name = name.replace(regex, "");

	var j = 0;
	while (arrayData[j]) {
		var word = arrayData[j].split("=");
		word[0] = word[0].replace(regex, "");
		if (name == word[0]) {
			return decodeURIComponent(word[1]);
		}
		
		if (++j >= arrayData.length)
			break;
	}
	
	return "";
};

/**
 * 押されたキーが数値型か判定します。
 * 
 * @param event
 * @return bool
 */
FEZX.Util.ControlInt = function(event){
	if (event.ctrlKey || event.altKey)
		return false;
	
	var kc = event.keyCode;
	
	// テンキー
	if(kc >= 96 && kc <= 105){
		return true;
	}
	
	// 数値キー
	if(kc >= 48 && kc <= 57){
		return true;
	}
	
	// デリート、バックスペース
	if(kc == 8 || kc==46){
		return true;
	}
	
	// 右、左
	if(kc == 39 || kc==37){
		return true;
	}
	
	// ホーム、エンド
	if(kc == 36 || kc==35){
		return true;
	}
	
	// タブ
	if(kc == 9){
		return true;
	}
	
	return false;
};

/*********************************************************
 * エンコード処理を行います
 * @author fujiwara
 **********************************************************/
/**
 * HTMLエンコードを行う
 *
 * @param arg HTMLエンコードを行いたい単語
 */
jQuery.extend({
	escapeHTML: function(arg) {
		string = ""+arg;
		return string
			.replace(/&/g, '&amp;' )
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#039;')
            .replace(/</g, '&lt;'  )
            .replace(/>/g, '&gt;'  );
	}
});

/**********************************************************
 * 文字数をカウントします
 * @author fujiwara
 **********************************************************/
/**
 * 文字数をカウントする
 *
 * @param obj 文字数を数えたい部分をid値で指定
 * @param name メッセージを入れたい部分をid値で指定
 * @param max 制限文字数
 */
function countchars(obj, name, max){
	var vname = document.getElementById(name+'_A');
	var num   = obj.value.replace(/\n/gm,'..').length;
	//var num  = obj1.value.replace(/\s|\n|\r|\t|　/gm,'.').length;
	vname.value = num;
	vname.innerHTML=num;
	vname.style.color=(num>max*0.9)?'red':'blue';
    document.getElementById(name+'_B').innerHTML = (num>max)?'文字　文字制限を越えました':'文字';
    document.getElementById(name+'_C').innerHTML = (num>max)?'':'　あと'+(max-num)+'文字入力できます。';
};

/**********************************************************
 * 共通DocumentReadyイベント
 **********************************************************/

$(function(){
	//タイムピッカー
	$.datepicker.setDefaults( $.datepicker.regional[ "ja" ] );
	$(".datepicker").datepicker({
		showOn: "button",
		dateFormat: "yy/mm/dd",
		buttonImage: "/content/img/calendar.gif",
		buttonImageOnly: true
	});

	$(".datepicker:disabled").datepicker("disable");

	//数値コンマ振り
	$("input[type=text].numberformat").each(function(){
		$(this).focus(function(){
			var val = $(this).attr('value');
			$(this).attr('value', FEZX.Util.UntiNumberFormat(val));
		});

		$(this).blur(function(){
			var val = $(this).attr('value');
			$(this).attr('value', FEZX.Util.NumberFormat(val));
		});
		
		// $(this).keydown(FEZX.Util.ControlInt);

		var val = $(this).attr('value');
		$(this).attr('value', FEZX.Util.NumberFormat(val));
	});
	
	$("input[type!=hidden],select").each(function(){
		var self = $(this);
		if(self.attr('disabled')){
			FEZX.Util.Disable(self);
		}
		else{
			FEZX.Util.Enable(self);
		}
	});
	
	//サブナビゲーション
	$("ul.sub_navi").hide();
	$("ul#g_navi>li").hover(
		function(){
			$("ul:not(:animated)", this).slideDown("fast");
		},
		function(){
			$("ul.sub_navi",this).slideUp("fast");
		}
	);

	// 送信時にコンマ振り解除
	$("form").submit(function(){
		$(this).find("input[type=text].numberformat").each(function(){
			var val = $(this).attr('value');
			$(this).attr('value', FEZX.Util.UntiNumberFormat(val));
		});
	});
	
	$('input[type=text].control_int').each(function(){
		$(this).keydown(FEZX.Util.ControlInt);
		
		$(this).blur(function(){
			val = $(this).attr('value');
			if(val.length && val.match(/^0*([^0]\d*)$/)){
				val = val.replace(/^0*([^0]\d*)$/, '$1');
				$(this).attr('value', val);
			}
		});
	});
	
	/************************************************
	 * inputChange()
	 ************************************************/
	if(document.getElementsByTagName) {
		var images = $("input[type=image],img");
		for(var i=0; i < images.length; i++) {
			if(images[i].getAttribute("src")){
				if(images[i].getAttribute("src").match("_off."))
				{
					images[i].onmouseover = function() {
						this.setAttribute("src", this.getAttribute("src").replace("_off.", "_on."));
					};
					images[i].onmouseout = function() {
						this.setAttribute("src", this.getAttribute("src").replace("_on.", "_off."));
					};
				}
			}
		}
	}
});